import configService from '@/common/service/config.service.js';
import store from '@/store/index.js';
class socket {
    constructor(options) {
        this.socketUrl = configService.apiUrl;
        this.socketStart = false;
        this.monitorSocketError();
        this.monitorSocketClose();
        this.socketReceive();
    }
    init(socket_type,callback) {
        const _this = this;
        if (configService.apiUrl) {
            if(this.socketStart){
                console.log('webSocket已经启动了');
            }else{
                let userid=store.state.userid?store.state.userid:store.getters.userid;
                let url=this.socketUrl.replace("https://","wss://").replace("http://","ws://")+"/"+socket_type+"/"+userid+"_app";
                console.log("启动this.socketUrl连接地址:",url);

                uni.connectSocket({
                    url: url,
                    method: 'GET'
                });
                uni.onSocketOpen((res) => {
                    this.socketStart = true;
                    callback && callback();
                    console.log('WebSocket连接已打开！');
                });
                /*setTimeout(() => {
                   _this.getHeartbeat();
                }, 5000);*/
            }
        }else{
            console.log('config/baseUrl socketUrl为空');
        }
    }
    //Socket给服务器发送消息
    send(data, callback) {
        const _this = this;
        if (store.state.userid) {
            data.userUid =store.state.userid;
        }
        console.log(data);
        uni.sendSocketMessage({
            data: JSON.stringify(data),
            success: () => {
                callback && callback(true);
            },
            fail: () => {
                callback && callback(false);
            }
        });
    }
    //Socket接收服务器发送过来的消息
    socketReceive() {
        const _this = this;
        uni.onSocketMessage(function(res) {
            console.log("APP:----》收到服务器内容:",res);
            let data = JSON.parse(res.data);
            //console.log('收到服务器内容：', data);
            _this.acceptMessage && _this.acceptMessage(data);
        });
    }
    //关闭Socket
    closeSocket() {
        const _this = this;
        uni.closeSocket();
        _this.socketStart = false;
    }
    //监听Socket关闭
    monitorSocketClose() {
        const _this = this;
        uni.onSocketClose(function(res) {
            console.log('WebSocket 已关闭！');
            _this.socketStart = false;
            setTimeout(function() {
                //_this.init();
            }, 3000);
        });
    }
    //监听Socket错误
    monitorSocketError() {
        const _this = this;
        uni.onSocketError(function(res) {
            _this.socketStart = false;
            console.log('WebSocket连接打开失败，请检查！');
        });
    }
    //心跳
    getHeartbeat() {
        const _this = this;
        this.send({
            type: "心跳",
            userUid: store.state.userid
        }, (val) => {
            setTimeout(() => {
                if (val) {
                    //_this.getHeartbeat();
                } else {
                    if(!_this.socketStart){
                        //_this.init();
                    }
                }
            }, 10000);
        });
    }
}
const mySocket = new socket();
export default mySocket;
